package estacion.acciones;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import com.opensymphony.xwork2.ActionSupport;

import estacion.dominio.Autobus;
import estacion.dominio.Conductor;
import estacion.dominio.Estacion;
import estacion.dominio.Linea;
import estacion.dominio.Persona;
import estacion.dominio.Revisor;
import estacion.dominio.Taxi;
import estacion.dominio.Tienda;
import estacion.dominio.Tramo;
import estacion.dominio.Tren;
import estacion.dominio.Vehiculo;
import estacion.dominio.Vendedor;

public class GestorEstaciones extends ActionSupport{

	private static final long serialVersionUID = 1L;
	private	String nombre_antiguo, nombre_nuevo, nombre_estacion;
	private int operacion;
	private Estacion estacion=new Estacion();
	private List<Estacion>estaciones=new ArrayList<Estacion>();
	private String informacion1, informacion;
	Tramo t=new Tramo();
	private ArrayList<String> lin;
	private ArrayList<String> tie;
	private ArrayList<String> veh;
	private ArrayList<String> lic;
	
	
	
	@Override
	public String execute() throws Exception {
		if(this.operacion==Constantes.MODIFICAR){
			if(!this.getNombre_antiguo().equals("")&&!this.getNombre_nuevo().equals("")){
				if(estacion.consultarEstacion(this.getNombre_nuevo())==null){
					estacion.modificarEstacion(this.getNombre_antiguo(),this.getNombre_nuevo());
					informacion="Cambio realizado con exito";
				}else informacion="El nombre nuevo introducido ya existe";
			}else informacion="Introduzca correctamente los nombres";
		}else if(this.operacion==Constantes.ANADIR){
			if(!this.getNombre_estacion().equals("")){
				if(estacion.consultarEstacion(this.getNombre_estacion())==null){
					estacion.setEstacion(this.getNombre_estacion());
					estacion.insertarEstacion();
					informacion1="Estacion insertada con exito";
				}else informacion1="La estacion ya existe";
			}else informacion1="Rellene el nombre correctamente";
		}return SUCCESS;
	}
	public String getNombre_antiguo() {
		return nombre_antiguo;
	}
	public void setNombre_antiguo(String nombre_antiguo) {
		this.nombre_antiguo = nombre_antiguo;
	}
	public String getNombre_nuevo() {
		return nombre_nuevo;
	}
	public void setNombre_nuevo(String nombre_nuevo) {
		this.nombre_nuevo = nombre_nuevo;
	}
	public List<Estacion> getEstaciones() throws Exception {
		estaciones=estacion.getEstaciones();
		return estaciones;
	}
	public void setEstaciones(List<Estacion> estaciones) {
		this.estaciones = estaciones;
	}
	public String getInformacion1() {
		return informacion1;
	}
	public void setInformacion1(String informacion1) {
		this.informacion1 = informacion1;
	}
	public String getInformacion() {
		return informacion;
	}
	public void setInformacion(String informacion) {
		this.informacion = informacion;
	}
	public String getNombre_estacion() {
		return nombre_estacion;
	}
	public void setNombre_estacion(String nombre_estacion) {
		this.nombre_estacion = nombre_estacion;
	}
	public void setOperacion(String operacion) {
		if (operacion.equalsIgnoreCase("Cambiar"))
			this.operacion = Constantes.MODIFICAR;
		else if (operacion.equalsIgnoreCase("Insertar"))
			this.operacion = Constantes.ANADIR;
	}

	public List<String> estaciones() throws Exception {
		Estacion e = new Estacion();
		List<Estacion> aux = e.getEstaciones();
		List<String> estaciones = new ArrayList<String>();
		for(int i=0; i<aux.size();i++) estaciones.add(aux.get(i).getEstacion());
		
		return estaciones;
	}
	
	public ArrayList<Integer> codigos_lineas() throws Exception{
		Linea lin = new Linea();
		ArrayList<Integer> codigos = new ArrayList<Integer>();
		Vector<Linea> lineas = new Vector<Linea>();
		
		lineas = lin.getLineas();
		
		for(int i=0; i<lineas.size();i++) codigos.add(lineas.get(i).getCodigo_linea());
		
		return codigos;
	}
	
	public ArrayList<String> li(){
		lic = new ArrayList<String>();
		lic.add("--");
		lic.add("tren");
		lic.add("taxi");
		lic.add("bus");
		return lic;
	}

	
	public ArrayList<String> vehiculos() throws Exception{
		Taxi taxi=new Taxi();
		Autobus autobus=new Autobus();
		Tren tren=new Tren();
		Conductor cond=new Conductor();
		List<Persona> conds=cond.getPersonas();
		Revisor rev=new Revisor();
		List<Persona> revs=rev.getPersonas();
		List<Vehiculo> taxis=taxi.getVehiculos();
		List<Vehiculo> trenes=tren.getVehiculos();
		List<Vehiculo> autobuses=autobus.getVehiculos();
		veh = new ArrayList<String>();
		veh.add("--");
		for(int i=0;i<taxis.size();i++)	veh.add(taxis.get(i).getCodigo_vehiculo());
		for(int i=0;i<trenes.size();i++)veh.add(trenes.get(i).getCodigo_vehiculo());
		for(int i=0;i<autobuses.size();i++)veh.add(autobuses.get(i).getCodigo_vehiculo());
		for(int i=0;i<conds.size();i++){
			for(int j=0;j<veh.size();j++){
				if(veh.get(j).equals((((Conductor) conds.get(i)).getTipo_vehiculo()))&&!((Conductor) conds.get(i)).getLicencia().getTipo_licencia().equals("tren")){
					veh.remove(j);
				}
			}
		}
	   for(int i=0;i<conds.size();i++){
		   for(int k=0;k<revs.size();k++){
			for(int j=0;j<veh.size();j++){
				if(veh.get(j).equals((((Conductor) conds.get(i)).getTipo_vehiculo()))&&veh.get(j).equals((((Revisor) revs.get(k)).getTipo_vehiculo()))){
					veh.remove(j);
				}
			}
		   }
		}
		
		return veh;
	}
	
	
	public ArrayList<String> tienda() throws Exception{
		Tienda tienda=new Tienda();
		Vendedor vend=new Vendedor();
		List<Persona> vends=vend.getPersonas();
		List<Tienda> tiendas=tienda.getTiendas();
		tie = new ArrayList<String>();
		tie.add("--");
		for(int k=0;k<tiendas.size();k++) tie.add(tiendas.get(k).getTipo_producto());
		for(int i=0;i<vends.size();i++){
			for(int j=0;j<tie.size();j++){
				if(tie.get(j).equals(tienda.consultTiendaporCodigo(((Vendedor) vends.get(i)).gettienda().getCodigo_Tienda()).getTipo_producto())){
					tie.remove(j);
				}
			}
		}
		return tie;
	}
	
	
	public ArrayList<String> linea() throws Exception{
		Linea linea=new Linea();
		Tramo t=new Tramo();
		Tren tr=new Tren();
		Autobus b=new Autobus();
		List<Vehiculo> trenes=tr.getVehiculos();
		List<Vehiculo> buses=b.getVehiculos();
		List<Linea> lineas=linea.getLineas();
		lin = new ArrayList<String>();
		lin.add("--");
		for(int i=0;i<lineas.size();i++){
			if(t.consultarTramos(lineas.get(i).getCodigo_linea())>0)lin.add(lineas.get(i).getnombre());
		}
		for(int i=0;i<trenes.size();i++){
			for(int j=0;j<lin.size();j++){
				if(lin.get(j).equals(linea.consultarLinea(((Tren)trenes.get(i)).getLinea().getCodigo_linea()).getnombre())){
					lin.remove(j);
				}
			}
		}
		for(int i=0;i<buses.size();i++){
			for(int j=0;j<lin.size();j++){
				if(lin.get(j).equals(linea.consultarLinea(((Autobus)buses.get(i)).getLinea().getCodigo_linea()).getnombre())){
					lin.remove(j);
				}
			}
		}
		return lin;
	}
	
	public ArrayList<String> nombres_lineas() throws Exception{
		Linea lin = new Linea();
		ArrayList<String> nombres = new ArrayList<String>();
		Vector<Linea> lineas = new Vector<Linea>();
		
		lineas = lin.getLineas();
		
		for(int i=0; i<lineas.size();i++) nombres.add(lineas.get(i).getnombre());
		
		return nombres;
	}
	public ArrayList<String> nombres_lineas_sin() throws Exception{
		Linea lin = new Linea();
		Tren t = new Tren();
		ArrayList<String> nombres = new ArrayList<String>();
		Vector<Linea> lineas = new Vector<Linea>();
		
		lineas = lin.getLineas();
		
		for(int i=0; i<lineas.size();i++){
			if(t.consultarVehiculoLinea(lineas.get(i).getCodigo_linea()) == null){
				nombres.add(lineas.get(i).getnombre());
			}
		}
		
		return nombres;
	}

}
